#pragma once

#ifndef EDITOR__META__OBJECT__INCLUDED__HH__
#define EDITOR__META__OBJECT__INCLUDED__HH__

#include <string>
#include <sstream>
#include <unordered_map>
#include "LitEditorPrerequisites.h"

namespace Lit
{
	namespace Editor
	{		
		class LIT_API MetaObject
		{
		public:
			typedef std::unordered_map<std::string, std::string> InfoList;
		protected:
			static unsigned long RefCount;
			InfoList mInfos;

		public:
			MetaObject( const std::string &name = NameGenerator("MetaObject","","_") );
			~MetaObject( );

			const std::string& getInfo( const std::string &name );
			void setInfo( const std::string &name, const std::string &value );
			bool hasInfo( const std::string &name ) const;
			void clearInfos();

			static std::string NameGenerator( const std::string &prefix="MetaObject", const std::string &suffix="", const std::string &separator = "_" );
		};
	};
};

#endif